package przetarg;

import bazy.HibernateUtil;
import bazy.Przetargi;
import java.io.Serializable;
import java.util.Date;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import logowanie.LogBean;
import org.hibernate.Session;

/**
 * Komponent zarządzajacy odpowiedzialny za edycję i dodawanie przetargów.
 * @author Grzesiek
 */
@Named(value = "przetargBean")
@RequestScoped
public class PrzetargBean implements Serializable {

    private String nazwa_przetargu;
    private Date data_przetargu;
    private Session session = null;
    private int id_przetargu;
    private String akcja = "Dodaj";
    private String naglowek = "Dodaj nowy przetarg";
    private boolean formularz = true;
    private String message = "";

    public boolean isFormularz() {
        return formularz;
    }

    /** Creates a new instance of UzytkownikBean */
    public PrzetargBean() {
    }

    /**
     * Uzupełnienie pól formularza o istniejące dane.
     * @param id
     */
    public void edytuj(int id) {
        session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Przetargi u = (Przetargi) session.load(Przetargi.class, id);
        this.nazwa_przetargu = u.getNazwa();
        this.data_przetargu = u.getDataPrzetargu();
        this.message = "";
        this.id_przetargu = u.getIdprzetargi();
        this.akcja = "Edytuj";
        this.naglowek = "Edytuj dane przetargu";
        session.getTransaction().commit();
        session.close();
    }

    /**
     * Dodanie nowego przetargu, bądź edycja istniejącego.
     * Edycja przetargu następuje gdy id_przetargu nie jest równe zero
     * @return
     */
    public String dodaj() {
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            if (id_przetargu == 0) {
                session.save(new Przetargi(getData_przetargu(), getNazwa_przetargu(), null, null));
                message = "Dodales nowy przetarg";
                // return "przetargi_menadzer";
            } else {
                this.setNaglowek("Edytuj dane przetargu");

                Przetargi do_edycji = (Przetargi) session.load(Przetargi.class, getId_przetargu());
                do_edycji.setDataPrzetargu(data_przetargu);
                do_edycji.setNazwa(nazwa_przetargu);
                session.update(do_edycji);
                message = "Edycja przebiegła pomyślnie";
                //   return "przetargi_menadzer";
            }
            formularz = false;
            session.getTransaction().commit();
            session.close();
            return "przetargi_menadzer";
        } catch (org.hibernate.exception.ConstraintViolationException ex) {
            message = "Istnieje użytkownik o takim Loginie.";
            formularz = true;
            session.getTransaction().commit();
            session.close();
            return "przetargi_menadzer";
        }
    }

/////////////////////////////////////////////////////////////////////////////////
    /**
     * @return the nazwa_przetargu
     */
    public String getNazwa_przetargu() {
        return nazwa_przetargu;
    }

    /**
     * @param nazwa_przetargu the nazwa_przetargu to set
     */
    public void setNazwa_przetargu(String nazwa_przetargu) {
        this.nazwa_przetargu = nazwa_przetargu;
    }

    /**
     * @return the data_przetargu
     */
    public Date getData_przetargu() {
        return data_przetargu;
    }

    /**
     * @param data_przetargu the data_przetargu to set
     */
    public void setData_przetargu(Date data_przetargu) {
        this.data_przetargu = data_przetargu;
    }

    /**
     * @return the id_przetargu
     */
    public int getId_przetargu() {
        return id_przetargu;
    }

    /**
     * @param id_przetargu the id_przetargu to set
     */
    public void setId_przetargu(int id_przetargu) {
        this.id_przetargu = id_przetargu;
    }

    /**
     * @return the akcja
     */
    public String getAkcja() {
        return akcja;
    }

    /**
     * @param akcja the akcja to set
     */
    public void setAkcja(String akcja) {
        this.akcja = akcja;
    }

    /**
     * @return the naglowek
     */
    public String getNaglowek() {
        return naglowek;
    }

    /**
     * @param naglowek the naglowek to set
     */
    public void setNaglowek(String naglowek) {
        this.naglowek = naglowek;
    }

    /**
     * @return the message
     */
    public String getMessage() {
        return message;
    }

    /**
     * Inicjalizacja strony, sprawdzenie uprawnień, oraz w przypadku wystąpienia parametrów widoku, odpowiednia ich obsługa.
     */
    public void inicjalizuj() {
        FacesContext context = FacesContext.getCurrentInstance();
        LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
        if (!bean.isLoggedin() || !bean.getUprawnienia().equals("zaopatrzeniowiec")) {
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }

        if (akcja != null) {
            if (akcja.equals("edytuj")) {
                edytuj(id_przetargu);
            }
        }

    }
}
